package 系统复习.贪心算法;

/**
 * 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。
 * 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说，如果你在 nums[i] 处，你可以跳转到任意 nums[i + j] 处:
 * 0 <= j <= nums[i]
 * i + j < n
 * 返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。
 */
public class L45 {

    public int jump(int[] nums) {

        int result = 0;
        // 当前覆盖的最远距离下标
        int end = 0;
        // 下一步覆盖的最远距离下标
        int temp = 0;
        for (int i = 0; i <= end && end < nums.length - 1; i++) {
            temp = Math.max(temp, i + nums[i]);
            // 可达位置的盖面次数就是跳跃次数
            if (i == end) {
                end = temp;
                result++;
            }
        }
        return result;

    }

    public static void main(String[] args) {
        L45 l45 = new L45();
        System.out.println(l45.jump(new int[]{7,0,9,6,9,6,1,7,9,0,1,2,9,0,3}));
    }
}
